// uiJqConfig 配置
angular.module('app').factory('uiJqConfig', function(rest, apiUrl, user) {
    return {
        /* dataTable 的公共设置 */
        'dataTable': {
            /**
             * 滚动余界是指DataTable在当前页面还有多少条数据可供滚动时自动加载新的数据，你可能希望指定一个足够大的余界，以便滚动加载数据的操作对用户来说是平滑的，同时也不会大到加载比需要的多的多的数据
             */
            "iScrollLoadGap": 50,
            /**
             * 设置为 true 时，dataTable变成下拉刷新数据。
             */
            "bScrollInfinite": false,
            "bScrollCollapse": false,
            "sScrollY": "9999px",
            /**
             * 开启排序功能
             */
            "bSort": false,
            /**
             * 设置使用Ajax方式调用的服务器端的处理方法或者Ajax数据源的HTTP请求方式
             */
            "sServerMethod": "POST",
            /**
             * DataTables载入数据时，是否显示‘进度’提示
             */
            "bProcessing": true,
            /**
             * 是否启动服务器端数据导入
             */
            "bServerSide": true,
            /**
             * 是否打开客户端状态记录功能,此功能在ajax刷新纪录的时候不会将个性化设定回复为初始化状态
             */
            "bStateSave": true,
            /**
             * 更改显示记录数选项
             */
            "aLengthMenu": [10, 20, 50, 100],
            /**
             * 默认显示的记录数
             */
            "iDisplayLength": 10,
            /**
             * 是否自适应宽度
             */
            "bAutoWidth": false,
            /**
             * 是否开启DataTables的高度自适应，当数据条数不够分页数据条数的时候，插件高度是否随数据条数而改变
             */
            "bScrollCollapse": true,
            /**
             * 是否显示（应用）分页器
             */
            "bPaginate": true,
            /**
             * 是否显示页脚信息，DataTables插件左下角显示记录数
             */
            "bInfo": true,
            /**
             * 是否启动过滤、搜索功能
             */
            "bFilter": false,
            /**
             * 当使用Ajax数据源或者服务器端处理的时候，DataTable会默认搜索aaData属性作为数据源，该选项允许变更数据源的名称，你可以使用JavaScript的点号对象表示法去访问多级网状数据源
             */
            "sAjaxDataProp": "data",
            /**
             * 该参数用来向DataTable指定加载的外部数据源（如果想使用现有的数据，请使用aData），可以简单的提供一个可以用来获得数据url或者JSON对象，该对象必须包含aaData，作为表格的数据源
             */
            "sAjaxSource": apiUrl,
            /**
             * 这是用于定义DataTable布局的一个强大的属性，包括分页，显示多少条数据和搜索。具体使用方法参考：http://blog.csdn.net/lisky119/article/details/25884197
             */
            // "sDom":"",
            /**
             * sScrollXInner ：当横向滚动可用的时候，该属性可以用来强制DataTable的宽度比需要的更长，比如你需要表格彼此相隔适宜，该变量可以用来使表格变大，而且强制滚动，该该属性可以是css设置，或者一个数字（作为像素量度来使用）
             */
            "sScrollX": "100%",
            "sScrollXInner": "100%",
            /**
             * 国际化配置
             */
            "oLanguage": {
                "sProcessing": "正在获取数据，请稍后...",
                "sLengthMenu": "显示 _MENU_ 条",
                "sZeroRecords": "没有您要搜索的内容",
                // "sInfo": "从 _START_ 到  _END_ 条记录 总记录数为 _TOTAL_ 条",
                "sInfo": "从 _START_ 到  _END_ 条记录 总记录数为 _TOTAL_ 条",
                "sInfoEmpty": "记录数为0",
                // "sInfoFiltered": "(全部记录数 _MAX_ 条)",
                "sInfoFiltered": "",
                "sInfoPostFix": "",
                "sSearch": "搜索",
                "sUrl": "",
                "oPaginate": {
                    "sFirst": "第一页",
                    "sPrevious": "上一页",
                    "sNext": "下一页",
                    "sLast": "最后一页"
                }
            },
            /**
             * 服务器端，数据回调处理 。自定义ajax请求
             * @param  {[type]} sSource    [description]
             * @param  {[type]} aData      [description]
             * @param  {[type]} fnCallback [description]
             * @return {[type]}            [description]
             */
            "fnServerData": function(sSource, aData, fnCallback, dataTableObject) {
                var obj = dataTableObject.oAjaxData,
                    _baseParams = {
                        'landlordId': user.get('landlordId'),
                        // 'landlordId':'ec1a71e8-622d-45b4-b256-2b037ea64458',
                        'pageIndex': obj.iDisplayStart / obj.iDisplayLength + 1,
                        'pageSize': obj.iDisplayLength
                    };
                $("html, body").animate({
                    scrollTop: 0 + "px"
                }, "fast");
                var __data = angular.extend({}, _baseParams, obj.queryParams);
                rest.deco({
                    methodId: sSource,
                    data: __data,

                    success: function(data) {
                        if ("0" == data.code) {
                            var data = {
                                'aaData': data.res.data.rows,
                                'sEcho': obj.sEcho,
                                'iTotalDisplayRecords': data.res.data.page.totalCount,
                                'iTotalRecords': data.res.data.page.totalCount,
                                'success': data.code == "0" ? true : false
                            };
                            fnCallback(data);
                            $(dataTableObject.nScrollBody).css('overflow', 'visible');
                        }
                    }
                })
            }
        }
    }
});